<?php

/* * *********************************************************** */
/* * ******************** controller venda ******************* */
/* * ************ Desenvolvido por Antônio Ezequiel ************** */
/* * *********************************************************** */

//verifica se o usuario esta logado
if (!verificaUsuarioLogado())
    header("location: " . $configurator["siteadmin"] . '/login.A&V');
//verifica se a sessão expirou
if (verificarExpiracaoSessao ())
    header("location: " . $configurator["siteadmin"] . '/login.A&V');
//verifica se o usuario tem permissao
if (!verificaPermissao($_GET['pg'])) {
    header("location: " . $configurator["siteadmin"] . '/erro_permissao.A&V');
}

//atauliza o log do usuario
atualizaLogUsuario($configurator);

//inclusão das classes
include($configurator["classes"] . "/cliente.classes.php");
include($configurator["dao"] . "/clienteDao.php");
include($configurator["classes"] . "/produto.classes.php");
include($configurator["dao"] . "/produtoDao.php");
include($configurator["classes"] . "/venda.classes.php");
include($configurator["dao"] . "/vendaDao.php");
include($configurator["classes"] . "/item_venda.classes.php");
include($configurator["dao"] . "/itemVendaDao.php");
include($configurator["classes"] . "/forma_pagamento.classes.php");
include($configurator["dao"] . "/formaPagamentoDao.php");

//instanciação dos objetos
$_cliente = new ClienteDao();
$_produto = new ProdutoDao();
$_venda = new VendaDao();
$_itemVenda = new ItemVendaDao();
$_formaPagamento = new FormaPagamentoDao();

//variavel de controle, para limpar o carrinho
$verificaLimparCarrinho = true;

//mostra os produtos possiveis de serem vendidos
if ($_GET["q"]) {
    $q = strtolower($_GET["q"]);
    if (!$q)
        return;

    $produtos = $_produto->listarProdutosAutoComplite($q);

    foreach ($produtos as $key => $value) {
        $cod = $value['codigo'];
        $val = $value['titulo'];
        $est = $value['estoque'];
        $items[$cod] = $val . " / Estoque($est) / ".$cod;
    }

    foreach ($items as $key => $value) {
        if (strpos(strtolower($value), $q) !== false) {
            echo "$value\n";
        }
    }
    exit;
}

if ($_GET['client']) {
    //variavel de controle, para limpar o carrinho
    $verificaLimparCarrinho = false;
    $cliente = $_cliente->selecionarCliente($_GET['cpf']);
    if ($cliente) {
        $_SESSION['clienteVenda'] = $cliente;
        echo '2';
    } else {
        echo "1";
    }
    exit;
}

if ($_GET['clientAjax']) {
    //variavel de controle, para limpar o carrinho
    $verificaLimparCarrinho = false;
    if ($_SESSION['clienteVenda']) {
        $smarty->assign("clienteSelecionado", $_SESSION['clienteVenda'][0]);
    }
    $smarty->display("venda_cadastro.tpl");
    exit;
}

if ($_GET['adicionarProduto']) {

    //variavel de controle, para limpar o carrinho
    $verificaLimparCarrinho = false;
    $prod = explode('/', $_GET['produto']);
    $produto = $_produto->listarProduto($prod[2]);
    $ja_adicionado = false;
    if ($produto) {
        for ($i = 0; $i < count($_SESSION['itemVenda']); $i++) {
            if ($produto['codigo'] == $_SESSION['itemVenda'][$i]['codigo']) {
                $ja_adicionado = true;
                break;
            }
        }

        if (!$ja_adicionado) {
            $_SESSION['itemVenda'][] = $produto;
            $smarty->assign("erroAdicionar", 1);
        }else
            $smarty->assign("ja_adicionado", true);

        $cont = 0;

        for ($i = 0; $i < count($_SESSION['itemVenda']); $i++) {

            if ($_SESSION['itemVenda'][$i]['quant'] == 1 or (!isset($_SESSION['itemVenda'][$i]['quant'])))
                $_SESSION['itemVenda'][$i]['quant'] = 1;

            $totalVenda += ( $_SESSION['itemVenda'][$i]['quant']) * $_SESSION['itemVenda'][$i]['preco'];

            $_SESSION['itemVenda'][$i]['subtotal'] = ($_SESSION['itemVenda'][$i]['quant']) * $_SESSION['itemVenda'][$i]['preco'];
            $cont++;
        }
    }else
        $smarty->assign("erroAdicionar", 2);

    $smarty->assign("itensVenda", $_SESSION['itemVenda']);
    $smarty->assign("totalVenda", $totalVenda);
    $smarty->assign("quantItemVenda", $cont);
    $smarty->display("venda_cadastro.tpl");
    exit;
}

if ($_GET['alteraQuantidadeProduto']) {
    //variavel de controle, para limpar o carrinho
    $verificaLimparCarrinho = false;
    $tamanho_array = count($_SESSION['itemVenda']);
    for ($i = 0; $i < $tamanho_array; $i++) {

        if ($_SESSION['itemVenda'][$i]['codigo'] == $_GET['codigo']) {
            $product = $_produto->listarProduto($_SESSION['itemVenda'][$i]['codigo']);
            if ($product['estoque'] >= $_GET['quant']) {
                $_SESSION['itemVenda'][$i]['quant'] = $_GET['quant'];
                $smarty->assign("alterado", true);
            }else
                $smarty->assign("semEstoque", true);
        }

        $totalVenda += ( $_SESSION['itemVenda'][$i]['preco']) * $_SESSION['itemVenda'][$i]['quant'];
        $_SESSION['itemVenda'][$i]['subtotal'] = $_SESSION['itemVenda'][$i]['quant'] * $_SESSION['itemVenda'][$i]['preco'];
        $cont++;
    }

    $smarty->assign("itensVenda", $_SESSION['itemVenda']);
    $smarty->assign("totalVenda", $totalVenda);
    $smarty->assign("quantItemVenda", $cont);
    $smarty->display("venda_cadastro.tpl");

    exit;
}

if ($_GET['excluirItemProduto']) {
    $cont = 0;
    //variavel de controle, para limpar o carrinho
    $verificaLimparCarrinho = false;
    if ($_GET['codigo']) {
        for ($i = 0; $i < count($_SESSION['itemVenda']) - 1; $i++) {
            if ($_SESSION['itemVenda'][$i]['codigo'] == $_GET['codigo']) {
                $a = 1;
            } else {
                $totalVenda += ( $_SESSION['itemVenda'][$i]['preco']) * $_SESSION['itemVenda'][$i]['quant'];
                $_SESSION['itemVenda'][$indice] = $_SESSION['itemVenda'][$i];
                $cont++;
                $array_item[] = $_SESSION['itemVenda'][$i];
            }
        }
    } else {
        $codigos = explode('-', $_GET['codig']);
        for ($i = 0; $i < count($_SESSION['itemVenda']) - 1; $i++) {
            $encontrou = 0;
            foreach ($codigos as $key => $value) {
                if ($_SESSION['itemVenda'][$i]['codigo'] == $value) {
                    $encontrou = 1;
                }
            }
            if ($encontrou) {
                $a = 1;
            } else {
                $totalVenda += ( $_SESSION['itemVenda'][$i]['preco']) * $_SESSION['itemVenda'][$i]['quant'];
                $_SESSION['itemVenda'][$indice] = $_SESSION['itemVenda'][$i];
                $cont++;
                $array_item[] = $_SESSION['itemVenda'][$i];
            }
        }
    }

    $_SESSION['itemVenda'] = $array_item;
    $smarty->assign("itensVenda", $_SESSION['itemVenda']);
    $smarty->assign("totalVenda", $totalVenda);
    $smarty->assign("quantItemVenda", $cont);
    $smarty->display("venda_cadastro.tpl");

    exit;
}

//finaliza a venda do cliente
if ($_GET['finalizarCompra']) {
    //verifica se essa é uma atualização(reabrir e mexer) de venda
    if ($_GET['codigoVenda'] and $_GET['codigoVenda'] != '') {
        //pega todos os itens dessa venda
        $itens = $_itemVenda->listarItens($_GET['codigoVenda']);
        if ($itens) {
            for ($i = 0; $i < count($itens); $i++) {
                //seleciona o produto do item
                $produto = $_produto->listarProduto($itens[$i]['produto']);
                //atualiza o estoque do produto
                $_produto->setEstoque($produto['estoque'] + $itens[$i]['quantidade']);
                $product = $_produto->atualizarEstoque($itens[$i]['produto']);

                //verifica se conseguiu atualizar o estoque
                if ($product) {
                    $itv = $_itemVenda->deletarItem($itens[$i]['itvCodigo']);

                    //verifica se excluiu o item
                    if ($itv) {
                        $excluiItem[] = 1;
                    } else {
                        //caso não consuiga excluir ele terá q adicionar novamente os itens excluidos
                        for ($j = 0; $j < $i; $j++) {
                            //seleciona o produto do item
                            $produto = $_produto->listarProduto($itens[$j]['produto']);
                            $_itemVenda->setProduto($itens[$j]['produto']);
                            $_itemVenda->setQuant($produto['estoque'] - $itens[$j]['quantidade']);
                            $_itemVenda->setVenda($itens[$j]['venda']);
                            $_itemVenda->adicionarItemVenda();
                        }
                        break;
                    }
                } else {
                    //caso não consiga atualizar o estoque de um produto, ele terá q adicionar novamente os itens excluidos
                    for ($j = 0; $j < $i; $j++) {
                        //seleciona o produto do item
                        $produto = $_produto->listarProduto($itens[$j]['produto']);
                        $_itemVenda->setProduto($itens[$j]['produto']);
                        $_itemVenda->setQuant($produto['estoque'] - $itens[$j]['quantidade']);
                        $_itemVenda->setVenda($itens[$j]['venda']);
                        $_itemVenda->adicionarItemVenda();
                    }
                    break;
                }
            }
        }

        $tamanho_array = count($_SESSION['itemVenda']);
        for ($i = 0; $i < $tamanho_array; $i++) {
            $_itemVenda->setProduto($_SESSION['itemVenda'][$i]['codigo']);
            $_itemVenda->setQuant($_SESSION['itemVenda'][$i]['quant']);
            $_itemVenda->setVenda($_GET['codigoVenda']);
            $dadoItem = $_itemVenda->adicionarItemVenda();
            if ($dadoItem) {
                $_produto->setEstoque($_SESSION['itemVenda'][$i]['estoque'] + $_SESSION['itemVenda'][$i]['quantPrimeiro'] - $_SESSION['itemVenda'][$i]['quant']);
                $_produto->atualizarEstoque($_SESSION['itemVenda'][$i]['codigo']);
            }
        }
        $_SESSION['itemVenda'] = null;
        $_SESSION['clienteVenda'] = null;
        echo "1";
        exit;
    } else {
        $_venda->setCliente($_SESSION['clienteVenda'][0]['codigo']);
        $_venda->setUsuario($_SESSION['usuario_logado']['codigo']);
        $dados = $_venda->adicionarVenda();
        if ($dados) {
            $erro_gravar = null;
            $tamanho_array = count($_SESSION['itemVenda']);
            for ($i = 0; $i < $tamanho_array; $i++) {
                //verifica se o produto a ser vendido tem estoque suficiente
                $product = $_produto->listarProduto($_SESSION['itemVenda'][$i]['codigo']);
                //verifica se algum item não pode ser gravado
                if ($erro_gravar == null) {
                    if ($product['estoque'] >= $_SESSION['itemVenda'][$i]['quant']) {
                        $_itemVenda->setProduto($_SESSION['itemVenda'][$i]['codigo']);
                        $_itemVenda->setQuant($_SESSION['itemVenda'][$i]['quant']);
                        $_itemVenda->setVenda($dados);

                        $dadoItem = $_itemVenda->adicionarItemVenda();
                        //guarda o codigo, produtos, quantidades dos itens gravados
                        $itensGravados[] = $dadoItem;
                        $produtosGravados[] = $_SESSION['itemVenda'][$i]['codigo'];
                        $produtosQuantGravados[] = $_SESSION['itemVenda'][$i]['quant'];

                        if ($dadoItem) {
                            $_produto->setEstoque($_SESSION['itemVenda'][$i]['estoque'] - $_SESSION['itemVenda'][$i]['quant']);
                            $_produto->atualizarEstoque($_SESSION['itemVenda'][$i]['codigo']);
                        }
                    }else
                        $erro_gravar = 1;
                }
            }

            //verifica se ouve algum erro ao gravar a venda
            if ($erro_gravar != null) {
                //apaga todos os itens gravados anteriormente
                for ($i = 0; $i < count($itensGravados); $i++) {
                    $prod = $_produto->listarProduto($produtosGravados[$i]);
                    //atualiza estoque do item gravado
                    $_produto->setEstoque($produtosQuantGravados[$i] + $prod[estoque]);
                    $_produto->atualizarEstoque($produtosGravados[$i]);

                    $_itemVenda->deletarItem($itensGravados[$i]);
                }
                //apaga a venda
                $_venda->deletarVenda($dados);

                $cont = 0;
                for ($i = 0; $i < count($_SESSION['itemVenda']); $i++) {
                    $totalVenda += ( $_SESSION['itemVenda'][$i]['preco']) * $_SESSION['itemVenda'][$i]['quant'];
                    $cont++;
                }

                $smarty->assign("quantItemVenda", $cont);
                $smarty->assign("totalVenda", $totalVenda);
                $smarty->assign("vendaErroEfetuar", true);
                $smarty->assign("itensVenda", $_SESSION['itemVenda']);
                $smarty->assign("clienteSelecionado", $_SESSION['clienteVenda'][0]);
                $smarty->display("venda_cadastro.tpl");
            } else {
                $_SESSION['itemVenda'] = null;
                $_SESSION['clienteVenda'] = null;
                $smarty->assign("vendaEfetuada", true);
                $smarty->assign("clienteSelecionado", false);
                $smarty->display("venda_cadastro.tpl");
            }
        } else {
            echo "erro ao gravar a venda";
        }
    }
    exit;
}

//limpa o carrinho
if ($verificaLimparCarrinho) {
    $_SESSION['itemVenda'] = null;
    $_SESSION['clienteVenda'] = null;
}
$smarty->assign("formas_pagamento", $_formaPagamento->listarFormasPagamento());
$smarty->display("venda_cadastro.tpl");
?>
